<?php if ( ! defined("BASEPATH")) exit("No direct script access allowed");

class Vendas extends CI_Controller {
		
	public function __construct(){
		parent::__construct();
		init_painel();
	}

	public function index(){
		$this->gerenciar();
	}
	
	public function cadastrar(){
		esta_logado();
		$produto_carrinho = 0;
		$valor_total_carrinho = 0;
		$prince = 0;
		foreach ($this->cart->contents() as $items):
			extract($items);
			extract($options);
			$produto_carrinho = 1;
		endforeach;
		if ($produto_carrinho == 0):
			$this->form_validation->set_rules('produto_id', 'PRODUTOS', 'required');
		else:
			$carrinho_total = modificaDinheiroBanco($this->input->post('total'));
			$entrada_venda = modificaDinheiroBanco($this->input->post('entrada'));
			if ($carrinho_total < $entrada_venda):
				set_msg('msgerro', 'VALOR DA ENTRADA MAIOR QUE O TOTAL DA VENDA', 'erro');
				redirect($_SERVER['HTTP_REFERER']);
				//$this->form_validation->set_rules('total_venda', 'VALOR DA ENTRADA MAIOR QUE O TOTAL DA VENDA', 'required');
			endif;
		endif;
		$this->form_validation->set_rules('id_comprador', 'CLIENTE', 'required');
		$this->form_validation->set_rules('forma_pagamento_id', 'FORMA DE PAGAMENTO', 'required');
		$this->form_validation->set_rules('parcelamento_id', 'QUANTIDADE DE PARCELAS', 'required');
		$this->form_validation->set_rules('data_inicio', 'PRIMEIRA PARCELA', 'required|exact_length[10]');
		if ($this->form_validation->run()==TRUE):
			$dados = elements(array('parcelamento_id', 'forma_pagamento_id', 'id_comprador'), $this->input->post(NULL, TRUE));
			$dados['created'] = date('Y-m-d H:i:s');
			$dados['total'] = $carrinho_total;
			$id_venda = $this->vendas->do_insert($dados, FALSE);
			foreach ($this->cart->contents() as $items):
				extract($items);
				extract($options);
				$dados2['id_venda'] = $id_venda;
				$dados2['id_produto'] = $id;
				$dados2['id_condicional'] = $this->input->post('condicional');
				$dados2['quantidade'] = $qty;
				$dados2['valor'] = $price;
				$dados2['created'] = date('Y-m-d H:i:s');
				$this->vendas->do_insert_venda($dados2);
				//verificar se existe algum produto de condicional
				if ($this->input->post('condicional') != NULL):
					//localizar id da condicional
					$query_condicional = $this->condicionais->get_byid($this->input->post('condicional'), 'id')->row();
					$query_item_condicional = $this->condicionais->get_byid_condicionais($query_condicional->id, 'id_condicional')->result();
					foreach ($query_item_condicional as $linha_item_condicional):
						//localizar produto - voltar estoque de produto da condicional
						$estoque_produto = $this->produtos->get_byid($dados2['id_produto'], 'id')->row();
						$atualiza['quantidade'] =  $estoque_produto->quantidade + $linha_item_condicional->quantidade;;
						$this->produtos->do_update($atualiza, array('id'=>$dados2['id_produto']));
						$atualiza = NULL;
						$atualiza['situacao'] = 2;
						//atualizar situação do produto na condicional
						$this->condicionais->do_update_condicional_item($atualiza, array('id_condicional' => $linha_item_condicional->id_condicional, 'id_produto' => $dados2['id_produto']));
					endforeach;
				endif;
				//localizar produto - baixar estoque
				$estoque_produto = $this->produtos->get_byid($dados2['id_produto'], 'id')->row();
				$quantidade['quantidade'] = $estoque_produto->quantidade - $dados2['quantidade'];
				$this->produtos->do_update($quantidade, array('id'=>$dados2['id_produto']));
			endforeach;
			$this->cart->destroy();
			//localizar valor total
			$valor_total = '';
			$query_itens = $this->venda_item->get_byid_item($id_venda, 'id_venda')->result();
			foreach ($query_itens as $linha_itens):
				$valor_total = $valor_total + ($linha_itens->quantidade * $linha_itens->valor);
			endforeach;
			//localizar id do parcelamento para descobrir a quantidade de parcelas a serem geradas
			$query_parcelamento = $this->parcelamento->get_byid($this->input->post('parcelamento_id'), 'id')->row();
			$entrada = modificaDinheiroBanco($this->input->post('entrada'));
			$valor_total = $valor_total - $entrada;
			$valor_parcela = $valor_total / $query_parcelamento->quant_parcela;
			$dados = NULL;
			$dia_alterado = NULL;
			for ($parcela=0; $parcela<$query_parcelamento->quant_parcela; $parcela++):
				if ($parcela == 0):
					//salvar valor de entrada
					$dados['id_vendas'] = $id_venda;
					$dados['n_parcela'] = 0;
					$dados['vencimento'] = date('Y-m-d');
					$dados['valor'] = $entrada;
					if ($entrada == '' || $entrada == 0):
						$dados['situacao'] = 'Quitada';
						$dados['quitacao'] = date('Y-m-d');
					else:
						$dados['situacao'] = 'Pendente';
					endif;
					$dados['created'] = date('Y-m-d H:i:s');
					$dados['forma_pagamento_id'] = $this->input->post('forma_pagamento_id');
					$this->vendas_parcela->do_insert($dados);
					$dados = NULL;
					//desmembrar a data da primeira parcela
					$data_inicio = explode("/",$this->input->post('data_inicio'));
					$ano = $data_inicio[2];
					$mes = $data_inicio[1];
					$dia = $data_inicio[0];
				else:
					//gerar as datas corretas das parcelas
					$mes = $mes + 1;
					if ($mes > 12):
						$mes = 1;
						$ano = $ano + 1;
					endif;
				endif;
				$ultimo_dia_mes = cal_days_in_month(CAL_GREGORIAN, $mes, $ano);
				if ($ultimo_dia_mes < $dia):
					$dia_alterado = $ultimo_dia_mes;
				endif;
				$dados['n_parcela'] = $parcela + 1;
				$valor_parcela = number_format($valor_parcela, 2, '.', '');
				if (($query_parcelamento->quant_parcela - 1) != $parcela):
					//primeira até a penultima parcela
					$dados['valor'] = $valor_parcela;
				else:
					$dados['valor'] =  $valor_total - ($valor_parcela * $parcela);
				endif;
				if ($dia_alterado == ''):
					$dados['vencimento'] = date($ano.'-'.$mes.'-'.$dia);
				else:
					$dados['vencimento'] = date($ano.'-'.$mes.'-'.$dia_alterado);
				endif;
				$dia_alterado=NULL;
				$dados['forma_pagamento_id'] = $this->input->post('forma_pagamento_id');
				$dados['situacao'] = 'Pendente';
				$dados['id_vendas'] = $id_venda;
				$dados['created'] = date('Y-m-d H:i:s');
				$this->vendas_parcela->do_insert($dados);
			endfor;
			set_msg('msgok', 'Cadastro efetuado com sucesso.', 'sucesso');
			redirect(base_url('painel/vendas/cadastrar/'));
		endif;
		$data = array(
			'tela' => 'cadastrar'
		);
		set_tema('footerinc', load_js(array('maskmoney/jquery.maskMoney.min', 'maskmoney/maskmoney-script.min', 'maskedinput/jquery.maskedinput.min', 'maskedinput/maskedinput-script.min', 
		'cidadesEstado.min', 'select2/select2.min', 'select2/select2_locale_pt-BR.min', 'select2/select2-script.min', 'datepicker/foundation-datepicker.min', 'datepicker/datepicker-script.min', 'app.min', 'valida_cpf')));
		set_tema('headerinc', load_css(array('select2/select2-foundation5.min', 'datepicker/foundation-datepicker.min')));
		set_tema('titulo', 'Cadastro de vendas');
		set_tema('conteudo', load_modulo('painel', 'vendas', $data));
		load_template();
	}

	public function gerenciar(){
		esta_logado();
		$data = array(
			'tela'	=> 'gerenciar',
			'query'	=> $query = $this->vendas->get_all()->result()
		);
		set_tema('headerinc', load_css(array('datatables/dataTables.foundation.min')));
		set_tema('footerinc', load_js(array('datatables/jquery.dataTables.min', 'datatables/dataTables.foundation.min', 'app.min')));
		set_tema('titulo', 'Listagem de vendas');
		set_tema('conteudo', load_modulo('painel', 'vendas', $data));
		load_template();
	}
	
	public function editar(){
		esta_logado();
		$id_venda = $this->uri->segment(4);
		if ($id_venda == ''):
			//nao faz nada
		else:
			//localizar as parcelas
			$cont = 0;
			$query_vendas_parcela = $this->vendas_parcela->get_byid($id_venda, 'id_vendas')->result();
			$total_parcelas = 0;
			foreach ($query_vendas_parcela as $linha_vendas_parcela):
				if ($cont == 0):
					$this->form_validation->set_rules('vencimento'.$linha_vendas_parcela->n_parcela, ' DATA DA ENTRADA', 'required');
					$this->form_validation->set_rules('valor'.$linha_vendas_parcela->n_parcela, 'VALOR DA ENTRADA', 'required');
				else:
					$this->form_validation->set_rules('vencimento'.$linha_vendas_parcela->n_parcela, 'VENCIMENTO DA PARCELA '.$cont, 'required');
					$this->form_validation->set_rules('valor'.$linha_vendas_parcela->n_parcela, 'VALOR DA PARCELA '.$cont, 'required');
				endif;
				$cont++;
				$total_parcelas = $total_parcelas + modificaDinheiroBanco($this->input->post('valor'.$linha_vendas_parcela->n_parcela));
			endforeach;
			if ($total_parcelas != $this->input->post('total')):
				set_msg('msgerro', 'SOMATÓRIA DE PARCELAS É DIFERENTE DO VALOR TOTAL DA VENDA', 'erro');
				redirect($_SERVER['HTTP_REFERER']);
				//$this->form_validation->set_rules('valor_errado', 'SOMATÓRIA DE PARCELAS É DIFERENTE DO VALOR TOTAL DA VENDA', 'required');
			endif;
			$this->form_validation->set_rules('vencimento1', 'VENCIMENTO DA PARCELA 1', 'required');
			if ($this->form_validation->run()==TRUE):
				//efetuar as alterações - tabela parcela
				$query_vendas_parcela = $this->vendas_parcela->get_byid($id_venda, 'id_vendas')->result();
				foreach ($query_vendas_parcela as $linha_vendas_parcela):
						$vencimento = explode("/",$this->input->post('vencimento'.$linha_vendas_parcela->n_parcela));
						$vencimento = $vencimento[2].'-'.$vencimento[1].'-'.$vencimento[0];
						$dados['vencimento'] = $vencimento;
						$valor = modificaDinheiroBanco($this->input->post('valor'.$linha_vendas_parcela->n_parcela));
						$dados['valor'] = $valor;
						$this->vendas_parcela->do_update($dados, array('id_vendas'=>$id_venda, 'n_parcela'=>$linha_vendas_parcela->n_parcela));
				endforeach;
				redirect(current_url());
			endif;
		endif;
		$data = array(
			'tela'		=> 'editar',
			'idvenda'	=> $id_venda,
			'query'		=> $this->vendas->get_byid($id_venda)->row()
		);
		set_tema('footerinc', load_js(array('maskmoney/jquery.maskMoney.min', 'maskmoney/maskmoney-script.min', 'maskedinput/maskedinput-script.min', 'maskedinput/jquery.maskedinput.min', 'maskedinput/maskedinput-script', 'datepicker/foundation-datepicker.min', 'datepicker/datepicker-script.min', 'app.min')));
		set_tema('headerinc', load_css(array('select2/select2-foundation5.min', 'datepicker/foundation-datepicker.min')));
		set_tema('titulo', 'Alteração de vendas');
		set_tema('conteudo', load_modulo('painel', 'vendas', $data));
		load_template();
	}
	
	public function excluir(){
		if (is_admin(TRUE)):
			$vendas = $this->uri->segment(4);
			if ($vendas != NULL):
				$query = $this->vendas->get_byid($vendas);
				if ($query->num_rows()==1):
					$query = $query->row();
					//localizar e verificar se não há parcela quitada
					$query_vendas_parcela = $this->vendas_parcela->get_byid($vendas, 'id_vendas')->result();
					$parcela_quitada = 0;
					foreach($query_vendas_parcela as $linha_vendas_parcela):
						if ($linha_vendas_parcela->situacao == 'Quitada'):
							$parcela_quitada = 1;
						endif;
					endforeach;
					if ($parcela_quitada == 0):
						$dados['canceled'] = date('Y-m-d H:i:s');
						$this->vendas->do_update($dados, array('id'=>$vendas));
						$dados = NULL;
						//Localizar parcelas para inserir a situação Cancelado
						$query_vendas_parcela = $this->vendas_parcela->get_byid($vendas, 'id_vendas')->result();
						foreach($query_vendas_parcela as $linha_vendas_parcela):
							//inserir a situação cancelado
							$dados['situacao'] = 'Cancelado';
							$this->vendas_parcela->do_update($dados, array('id_vendas'=>$linha_vendas_parcela->id_vendas, 'n_parcela'=>$linha_vendas_parcela->n_parcela));
						endforeach;
						//localizar itens da venda
						$query_venda_item = $this->vendas->get_byid_vendas($vendas, 'id_venda')->result();
						foreach($query_venda_item as $linha_venda_item):
							//localizar produto - voltar estoque
							$estoque_produto = $this->produtos->get_byid($linha_venda_item->id_produto, 'id')->row();
							$quantidade['quantidade'] = $estoque_produto->quantidade + $linha_venda_item->quantidade;
							$this->produtos->do_update($quantidade, array('id'=>$linha_venda_item->id_produto));
						endforeach;
					else:
						set_msg('msgerro', 'Há parcelas Quitadas. Favor estornar as parcelas para excluir.', 'erro');
					endif;
				endif;
			else:
				set_msg('msgerro', 'Escolha uma despesa para excluir', 'erro');
			endif;
		endif;
		redirect('painel/vendas/gerenciar');
	}
	
	/*
	public function excluir_venda(){
		esta_logado();
		if (is_admin(TRUE)):
			$idvenda = $this->uri->segment(4);
			if ($idvenda != NULL):
				$query = $this->vendas->get_byid_vendas($idvenda);
				if ($query->num_rows()==1):
					$query = $query->row();
					$this->vendas->do_delete_vendas(array('id'=>$query->id), FALSE);
				else:
					set_msg('msgerro', 'venda não encontrado para exclusão', 'erro');
				endif;
			else:
				set_msg('msgerro', 'Escolha um venda para excluir', 'erro');
			endif;
		endif;
		$idvenda = $this->uri->segment(5);
		redirect('painel/vendas/editar/'.$idvenda);
	}
	*/

	public function adicionar_carrinho(){
		$segment = $this->uri->segment(4);
		$produtos = $this->input->post('produtos');
		$qtde_array = count($produtos);
		for($i = 0; $i < $qtde_array; $i++):
			$produto = $this->produtos->get_byid($produtos[$i])->row();
			$nome = $produto->nome;
			$nome = remove_acentos($nome);
			$nome = remove_caracteres($nome);
			$carrinho['id'] = $produto->id;
			$carrinho['qty'] = 1;
			$carrinho['price'] = $produto->valor;
			$carrinho['name'] = $nome;
			$carrinho['options'] = array(
				'nome' => $produto->nome
			);
			$this->cart->insert($carrinho);
		endfor;
		if($segment != NULL):
			redirect(base_url('painel/vendas/editar/'.$segment));
		else:
			redirect(base_url('painel/vendas/cadastrar/'.$this->input->post('condicional')));
		endif;
	}
	
	public function atualizar_carrinho($redirect = true){
		$segment = $this->uri->segment(4);
		$this->load->model('produtos_model', 'produtos');
		$contador = $this->input->post('cont', TRUE);
		for($i =1; $i <= $contador; $i++){
			$produto = $this->produtos->get_byid($this->input->post('id'.$i, TRUE))->row();
			//verificar se produto esta na condicional passada na URL
			$estoque_condicional = 0;
			if ($this->input->post('condicional') != NULL):
				$condicional_item = $this->condicionais->get_byid_condicionais_produtos_venda($this->input->post('condicional'), $produto->id)->num_rows();
				if ($condicional_item > 0):
					$condicional_item = $this->condicionais->get_byid_condicionais_produtos_venda($this->input->post('condicional'), $produto->id)->row();
					$estoque_condicional = $condicional_item->quantidade;
				endif;
			endif;
			$quantidade = $this->input->post('qty'.$i) + $estoque_condicional;
			if ($produto->quantidade + $estoque_condicional >= ($this->input->post('qty'.$i))):
				$data = array(
					'rowid'     => $this->input->post('rowid'.$i, TRUE),
					'qty'     	=> $this->input->post('qty'.$i, TRUE),
					'price'     => $this->input->post('price'.$i, TRUE),
				);
			else:
				set_msg('msgerro', 'A quantidade máxima para o produto <b>'.$produto->nome.'</b> é de '.$produto->quantidade.' unidade(s)', 'erro');
				$data = array(
					'rowid'      => $this->input->post('rowid'.$i),
					'qty'     => $this->input->post($linha->quantidade),
					'price'     => $this->input->post('price'.$i),
					);
			endif;
			$estoque_condicional = 0;
			$this->cart->update($data); 
		}
		if($segment != NULL):
			redirect(base_url('painel/vendas/editar/'.$segment));
		else:
			redirect(base_url('painel/vendas/cadastrar/'.$this->input->post('condicional')));
		endif;
	}
	
	/*copia carrinho anterior
	public function atualizar_carrinho($redirect = true){
		$segment = $this->uri->segment(4);
		$this->load->model('produtos_model', 'produtos');
		$contador = $this->input->post('cont', TRUE);
		for($i =1; $i <= $contador; $i++){
			$produto = $this->produtos->get_byid($this->input->post('id'.$i, TRUE))->row();	
			$data = array(
				'rowid'     => $this->input->post('rowid'.$i, TRUE),
				'qty'     	=> $this->input->post('qty'.$i, TRUE),
				'price'     => $this->input->post('price'.$i, TRUE),
			);
			$this->cart->update($data); 
		}
		if($segment != NULL):
			redirect(base_url('painel/vendas/editar/'.$segment));
		else:
			redirect(base_url('painel/vendas/cadastrar'));
		endif;
	}
	*/
	
	public function excluir_item(){
		$condicional = $this->uri->segment(6);
		$segment = $this->uri->segment(5);
		$i = $this->uri->segment(4);
		$data = array(
			'rowid'     => $i,
			'qty'     	=> 0,
		);
		$this->cart->update($data); 
		if($segment != NULL):
			if ($condicional == NULL):
				redirect(base_url('painel/vendas/editar/'.$segment));
			else:
				redirect(base_url('painel/vendas/cadastrar/'.$condicional));
			endif;
		else:
			redirect(($_SERVER['HTTP_REFERER']));
		endif;
	}
	
}

/* End of file vendas.php */
/* Location: ./application/controllers/vendas.php */
